<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="box">
        <!-- 
            侦听器 监视器  watch

         -->
         <input type="text"v-model="firstName"><br>
         <input type="text"v-model="lastName"><br>
         <input type="text"v-model="fullName"><br>


    </div>
    <script src="../js/vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#box',
            data:{
                firstName:'a',
                lastName:'b',
                fullName:"a-b",
                obj:{
                    name:'tom',
                    age:10
                },
                obj1:{
                    name:'tom',
                    age:10
                }
            },
            watch:{
                /* firstName(value){
                    // 监听firstName，当firstName中的值发生变化，就会触发  当前的回调函数 
                    // 意味我们开发人员可以在此处写一系列逻辑
                    console.log(value);
                    // 全名 = 第一个名字 + 最后一个名字
                    console.log(this);
                    this.fullName = value + '-' + this.lastName;
                }, */
                lastName(value){
                    console.log(value);
                    this.fullName = this.firstName + '-' + value;
                },
                fullName(value){
                    console.log(value);//xxx-yyy
                    // value = this.firstName + '-' + this.lastName;
                    let arr = value.split('-');
                    console.log(arr);
                    this.firstName = arr[0];
                    this.lastName = arr[1];
                    
                },
                /* obj(value){
                    console.log(value);
                } */
                obj:{
                    // 要监听引用数据类型时，必须使用深度监视，否则监视不到，回调函数的函数名handler,后面加上deep:true
                    handler(value){
                        console.log(value);
                    },
                    deep:true,

                    
                    immediate:true//不用改变obj的值，直接触发回调函数中的逻辑

                }
            }
        })
        console.log(vm.$watch);
        // $watch监听的仍然是data中的属性
        vm.$watch('firstName',function(newValue,oldValue){
            console.log("$watch");
            // newValue更改后的新值  oldValue旧值
            console.log(newValue,oldValue);
            // 可以做一些列的相关逻辑
            console.log(this);
            this.fullName = newValue + '-' + this.lastName;
        })
        vm.$watch('obj1',(newValue,oldValue)=>{
            console.log('$watch深度监视');
            console.log(newValue,oldValue);
        },{
            deep:true
        })
    </script>
</body>
</html>